Ejercicio 1: [5 puntos] Cree en Python usando numpy un tensor de 0D, 1D, 2D y uno 3D.

Ejercicio 2: [5 puntos] Imprima las dimensiones (shape) de MNIST. Esta tabla viene con el paquete tensorflow y se obtiene como sigue:

from tensorflow.keras.datasets import mnist

Ejercicio 3: [10 puntos] ¿Qué tipo de datos contiene MNIST?

Ejercicio 4: [10 puntos] La operación relu() es una operación que se aplica entrada por entrada de un vector, esta devuelve el máximo entre cada entrada del vector y 0 (relu(x) = max(x,0)). Reprograme esta función en Python y después pruébela con el siguiente vector x.

x = np.array[-1,3,-0.2,15].

Imprima el resultado

Ejercicio 5: [10 puntos] Calcule “a mano” y muestre el procedimiento de las siguientes operaciones de matrices (verifique en Python):

Ejercicio 6: [20 puntos] Calcule “a mano” las siguientes derivadas. Muestre el procedimiento:

a) $f(x) = \sin(4x)$ \ $f'(x)$ = 4cos(4x)

b) $f(x) = 6x^2 + 12x$ \ $f'(x) = 12x + 12$

c) $f(x) = \sqrt{x^3}$ \ $f'(x) = \dfrac{3}{2} \sqrt{x}$ $\vee$ $\dfrac{3x^2}{2\sqrt{x^3}}$

d) $f(x) = \cos(7x + 1)$ \ $f'(x)= -7sen(7x+1)$

e) $f(x) = 3 + \ln(9x)$ \ $f'(x) = \dfrac{9}{9x}= \dfrac{1}{x}$

f) $f(x) = (x^3-1)^{100}$ \ \begin{align*} f'(x) &= 3x^2\cdot100(x^3-1)^{99} \\ &=300x^2(x^3-1)^{99} \end{align*}

g) $f(x) = \dfrac{1}{\sqrt[3]{x^2+x+1}}$ \ \ Tome $a = x^2 + x + 1$

De esta forma

$f(x) = \dfrac{1}{\sqrt[3]{a}}$

Entonces, por regla de la cadena

\begin{align*} f'(x) &= \dfrac{-1}{(\sqrt[3]{a})^2} \cdot \dfrac{1}{3\sqrt[3]{a^2}} \cdot a' \\ f'(x) &= \dfrac{-1}{a^{2/3}} \cdot \dfrac{1}{3a^{2/3}} \cdot a' \\ f'(x) &= \dfrac{-1}{3a^{4/3}} \cdot a' \\ \end{align*}

Sustituyendo $a$ por la expresión original

$f'(x) = \dfrac{-1}{3 \cdot (x^2 + x + 1)^{4/3}} \cdot 2x+1$

Ejercicio 7: [10 puntos] Calcule “a mano” el gradiente de la siguiente función:

$$ f(x,y,z) = 3x^4 - 6xyz + 3yz $$
$$ \nabla f = \begin{bmatrix} 12x^3 - 6yz \\ -6xz + 3z \\ -6xy + 3y \end{bmatrix}$$

Ejercicio 8: [10 puntos] Usando el algoritmo del Descenso de Gradiente encuentre “a mano” un mínimo local de la siguiente función en el intervalo $[−1,4]$, use el punto de partida que considere adecuados. Luego grafique y verifique los resultados con código Python.

$$ f(x) = 3x^4 - 16x^3 +18x^2 $$

Tome $x_0 = 2$ y note que $f'(x) = 12x^3 - 48x^2 + 36x$

Paso 1

$f(x_0) = 3(2)^4 - 16(2)^3 +18(2)^2 = -8$

Paso 2

$f'(x_0) = f'(2) = -24$

Paso 3

Tomando $\eta = 0.05$

$x_1 = x_0 - \eta \cdot f'(x_0) = 2 - 0.05 \cdot -24 = 3.2$

$\Rightarrow f(x_1) = f(3.2)= -25.3952$

Tenemos el par $(3.2,-25.3952)$

Derivada de f

Ejercicio 9: [5 puntos] Usando el algoritmo del Descenso de Gradiente encuentre “a mano” un mínimo local de la siguiente función, use el punto de partida que considere adecuados. Luego grafique y verifique los resultados con código Python.

$$ f(x,y) = x^2 + y^2 -2x-6y+14 $$

Note que $f_x(x,y) = 2x -2$ y $f_y(x,y)= 2y -6$

$\nabla f = \begin{bmatrix} 2x - 2 \\ 2y -6 \end{bmatrix}$

Sea $x_0 = \begin{bmatrix} -5 \\ 5 \end{bmatrix}. $ Entonces $f(x_0) = 44 $

Tomando $\eta = 0.1$

$x_1 = x_0 - \eta \cdot f'(x_0) = \begin{bmatrix} -5 \\ 5 \end{bmatrix} - 0.1 \cdot \begin{bmatrix} -12 \\ 4 \end{bmatrix} = \begin{bmatrix} -3.8 \\ 4.6 \end{bmatrix}$

$\Rightarrow f(x_1) = f\Big(\begin{bmatrix} -3.8 \\ 4.6 \end{bmatrix}\Big)= -29.5999$

Ejercicio 10: [5 puntos] Usando el algoritmo del Descenso de Gradiente encuentre “a mano” un mínimo local de la siguiente función, use el punto de partida que considere adecuados. Luego grafique y verifique los resultados con código Python.

$$ f(x,y) = x^4 + y^4 -4xy+1 $$

Note que $f_x(x,y) = 4x^3 -4y$ y $f_y(x,y)= 4y^3 -4x$

$\nabla f = \begin{bmatrix} 4x^3 - 4y \\ 4y^3 - 4x \end{bmatrix}$

Sea $x_0 = \begin{bmatrix} -0.5 \\ 0.5 \end{bmatrix}. $ Entonces $f(x_0) = 2.125 $

Tomando $\eta = 0.1$

$x_1 = x_0 - \eta \cdot f'(x_0) = \begin{bmatrix} -0.5 \\ 0.5 \end{bmatrix} - 0.1 \cdot \begin{bmatrix} -2.5 \\ 2.5 \end{bmatrix} = \begin{bmatrix} -0.25 \\ 0.25 \end{bmatrix}$

$\Rightarrow f(x_1) = f\Big(\begin{bmatrix} -0.25 \\ 0.25 \end{bmatrix}\Big)= 1.2578$

Ejercicio 11: [5 puntos] ¿Qué pasa si en el código visto en clase para optimizar una Función de Costo (gradient_descent) se usa un momentum (impulso) más pequeño a 0.7?

¿Qué pasa si en el código visto en clase para optimizar una Función de Costo (gradient_descent) se usa un $\eta$ (learning rate) de $10^{−9}$?